//二次封装Axios 拦截器
import axios from "axios";
import config from '../config/index'

//设置公共URL;设置配置根据开发环境和生产环境不一样
const baseUrl = process.env.NODE_ENV === 'development' ?config.baseUrl.dev:
  config.baseUrl.pro

class HttpRequest{
  //构造函数传递公共URL
  constructor(baseUrl) {
      this.baseUrl = baseUrl;
  }
  //获取config配置文件中的公共URL
  getInsideConfig(){
    const config = {
      baseUrl : this.baseUrl,
      header:{
      }
    }
  }
  //设置拦截器
  interceptors(instanse){
    // 添加请求拦截器
    instanse.interceptors.request.use(function (config) {
      // 在发送请求之前做些什么
      return config;
    }, function (error) {
      // 对请求错误做些什么
      return Promise.reject(error);
    });
    // 添加响应拦截器
    instanse.interceptors.response.use(function (response) {
      // 对响应数据做点什么
      return response.data;
    }, function (error) {
      // 对响应错误做点什么
      return Promise.reject(error);
    });
  }

  //请求创建一个自定义的URL
  request(options){
    //创建自定义的URL实例
    const instance = axios.create();
    /*  小技巧   */
    //options为用户传递的请求参数，当options存在着替换配置文件中的请求参数
    options = {...(this.getInsideConfig()),...options}
    console.log(options)
    this.interceptors(instance) //将请求过滤
    return instance(options) //返回过滤好的请求对象
  }
}

export default new HttpRequest(baseUrl)

